#!/bin/bash

. /start-utils

# FUNCTIONS
function setServerProp {
  local prop=$1
  local var=$2
  if [ -n "$var" ]; then
    # normalize booleans
    case ${var^^} in
      TRUE|FALSE)
        var=${var,,} ;;
    esac
    log "Setting ${prop} to '${var}' in ${SERVER_PROPERTIES}"
    sed -i "/^${prop}\s*=/ c ${prop}=${var}" "$SERVER_PROPERTIES"
  else
    log "Skip setting ${prop}"
  fi
}

function customizeServerProps {
  if [ -n "$WHITELIST" ]; then
    log "Creating whitelist"
    setServerProp "whitelist" "true"
    setServerProp "white-list" "true"
  fi

  # If not provided, generate a reasonable default message-of-the-day,
  # which shows up in the server listing in the client
  if [ -z "$MOTD" ]; then
    # snapshot is the odd case where we have to look at version to identify that label
    if [[ ${ORIGINAL_TYPE} == "VANILLA" && ${VERSION} == "SNAPSHOT" ]]; then
      label=SNAPSHOT
    else
      label=${ORIGINAL_TYPE}
    fi

    # Convert label to title-case
    label=${label,,}
    label=${label^}
    MOTD="A ${label} Minecraft Server powered by Docker"
  fi

  setServerProp "server-name" "$SERVER_NAME"
  setServerProp "server-port" "$SERVER_PORT"
  setServerProp "motd" "$MOTD"
  setServerProp "allow-nether" "$ALLOW_NETHER"
  setServerProp "announce-player-achievements" "$ANNOUNCE_PLAYER_ACHIEVEMENTS"
  setServerProp "enable-command-block" "$ENABLE_COMMAND_BLOCK"
  setServerProp "spawn-animals" "$SPAWN_ANIMALS"
  setServerProp "spawn-monsters" "$SPAWN_MONSTERS"
  setServerProp "spawn-npcs" "$SPAWN_NPCS"
  setServerProp "spawn-protection" "$SPAWN_PROTECTION"
  setServerProp "generate-structures" "$GENERATE_STRUCTURES"
  setServerProp "view-distance" "$VIEW_DISTANCE"
  setServerProp "hardcore" "$HARDCORE"
  setServerProp "snooper-enabled" "$SNOOPER_ENABLED"
  setServerProp "max-build-height" "$MAX_BUILD_HEIGHT"
  setServerProp "force-gamemode" "$FORCE_GAMEMODE"
  setServerProp "max-tick-time" "$MAX_TICK_TIME"
  setServerProp "enable-query" "$ENABLE_QUERY"
  setServerProp "query.port" "$QUERY_PORT"
  setServerProp "enable-rcon" "$ENABLE_RCON"
  setServerProp "rcon.password" "$RCON_PASSWORD"
  setServerProp "rcon.port" "$RCON_PORT"
  setServerProp "max-players" "$MAX_PLAYERS"
  setServerProp "max-world-size" "$MAX_WORLD_SIZE"
  setServerProp "level-name" "$LEVEL"
  setServerProp "level-seed" "$SEED"
  setServerProp "pvp" "$PVP"
  setServerProp "generator-settings" "$GENERATOR_SETTINGS"
  setServerProp "online-mode" "$ONLINE_MODE"
  setServerProp "allow-flight" "$ALLOW_FLIGHT"
  setServerProp "level-type" "${LEVEL_TYPE^^}"
  setServerProp "resource-pack" "$RESOURCE_PACK"
  setServerProp "resource-pack-sha1" "$RESOURCE_PACK_SHA1"

  if [ -n "$DIFFICULTY" ]; then
    case $DIFFICULTY in
      peaceful|0)
        DIFFICULTY=0
        ;;
      easy|1)
        DIFFICULTY=1
        ;;
      normal|2)
        DIFFICULTY=2
        ;;
      hard|3)
        DIFFICULTY=3
        ;;
      *)
        log "DIFFICULTY must be peaceful, easy, normal, or hard."
        exit 1
        ;;
    esac
    setServerProp "difficulty" "$DIFFICULTY"
  fi

  if [ -n "$MODE" ]; then
    log "Setting mode"
    MODE_LC=$( echo $MODE | tr '[:upper:]' '[:lower:]' )
    case $MODE_LC in
      0|1|2|3)
        ;;
      su*)
        MODE=0
        ;;
      c*)
        MODE=1
        ;;
      a*)
        MODE=2
        ;;
      sp*)
        MODE=3
        ;;
      *)
        log "ERROR: Invalid game mode: $MODE"
        exit 1
        ;;
    esac
    setServerProp "gamemode" "$MODE"
  fi
}

# Deploy server.properties file
if [[ ${TYPE} == "FEED-THE-BEAST" ]]; then
  export SERVER_PROPERTIES=${FTB_DIR}/server.properties
  log "detected FTB, changing properties path to ${SERVER_PROPERTIES}"
fi

if [ ! -e "$SERVER_PROPERTIES" ]; then
  log "Creating server.properties in ${SERVER_PROPERTIES}"
  cp /tmp/server.properties "$SERVER_PROPERTIES"
  customizeServerProps
elif [ -n "${OVERRIDE_SERVER_PROPERTIES}" ]; then
    case ${OVERRIDE_SERVER_PROPERTIES^^} in
      TRUE|1)
        customizeServerProps
        ;;
      *)
        log "server.properties already created, skipping"
        ;;
    esac
else
  log "server.properties already created, skipping"
fi

exec /start-finalSetup05EnvVariables $@
